
local 玩家类 = class()

local  tp
function 玩家类:初始化(根)
  tp= 根
 self.玩家组={}
 self.xy={x=0,y=0}
 self.战斗动画=WAS动画类.创建(addon,0x97C79EDB)
 self.鼠标重叠 = false
 self.中摊位=WAS动画类.创建(addon,0x6D33D98E)
 self.大摊位=WAS动画类.创建(addon,0x74786102)
 self.摊位文字=文字类.创建(simsun,14)
 self.摊位文字:置颜色(0xFF0000FF)
 self.小摊位=WAS动画类.创建(addon,0xBD80E0DB)
  self.甲组冠军 = 资源:载入('JM.FT',"网易WDF动画",0xC4A082C0)
 self.甲组亚军 = 资源:载入('JM.FT',"网易WDF动画",0xE7706EE2)
 self.甲组季军 = 资源:载入('JM.FT',"网易WDF动画",0x6336F8B3)
 self.甲组八强 = 资源:载入('JM.FT',"网易WDF动画",0x7419201D)
 end

function 玩家类:更换武器(数据)
 self.临时数据1=数据

 if self.玩家组[self.临时数据1.id]==nil then return 0 end
 self.玩家组[self.临时数据1.id].变身=self.临时数据1.变身
 self.玩家组[self.临时数据1.id].动画=创建角色动画(self.临时数据1.造型,self.临时数据1.染色,self.临时数据1.武器数据.名称,self.临时数据1.武器数据.等级,self.临时数据1.武器数据.类别,self.临时数据1.武器数据.强化,self.临时数据1.坐骑,self.临时数据1.变身,self.临时数据1.锦衣数据)
 end
function 玩家类:更换摊位名称(数据)
  self.临时数据1=数据
 if self.玩家组[self.临时数据1.id]==nil then return 0 end
 self.玩家组[self.临时数据1.id].摊位名称=self.临时数据1.名称

 end

function 玩家类:添加玩家(数据)
 self.临时数据=数据
 self.玩家组[self.临时数据.id]={
 名称=self.临时数据.名称,
 id=self.临时数据.id,
 染色=self.临时数据.染色,
 造型=self.临时数据.造型,
 武器数据={类别==self.临时数据.武器数据.类别，等级==self.临时数据.武器数据.等级,名称==self.临时数据.武器数据.名称,强化==self.临时数据.武器数据.强化},
 x=self.临时数据.地图数据.x,
 y=self.临时数据.地图数据.y,
 动作="静立",
 状态=0,
 称谓=self.临时数据.称谓,
 方向=0,
 战斗开关=self.临时数据.战斗开关,
 移动目标=0,
 路径组={},
 变身=self.临时数据.变身,
 移动时间=0,
 发言内容={},
 摊位名称=self.临时数据.摊位名称,
 队长数据={开关=self.临时数据.队长,动画=WAS动画类.创建(addon,0x2231EBB4)},
 动画=创建角色动画(self.临时数据.造型,self.临时数据.染色,self.临时数据.武器数据.名称,self.临时数据.武器数据.等级,self.临时数据.武器数据.类别,self.临时数据.武器数据.强化,self.临时数据.坐骑,self.临时数据.变身,self.临时数据.锦衣数据)

}
if self.临时数据.战斗~=0 then

   self.玩家组[self.临时数据.id].战斗开关=true
   end
self.玩家组[self.临时数据.id].超丰富文本=require("Script/系统类/丰富文本")(100,100)
 :置文字(文字1)
 self.玩家组[self.临时数据.id].超丰富文本:添加元素("w",0xFFFFFFFF)
 self.玩家组[self.临时数据.id].超丰富文本:添加元素("h",0xFF000000)
 self.玩家组[self.临时数据.id].超丰富文本:添加元素("y",0xFFFFFF00)
 self.玩家组[self.临时数据.id].超丰富文本:添加元素("r",红色)
 self.玩家组[self.临时数据.id].超丰富文本:添加元素("g",0xFF00FF00)

  for n=0,119 do
    self.玩家组[self.临时数据.id].超丰富文本:添加元素(n,tp.包子表情动画[n])
  end
if self.临时数据.队长 then

   self.玩家组[self.临时数据.id].队长数据.开关=true

   end


 end

function 玩家类:添加发言内容(id,内容)

  if not self.玩家组[id] or not self.玩家组[id].发言内容 then return end
 self.玩家组[id].发言内容[#self.玩家组[id].发言内容+1]={起始=0,开关=false,长度=string.len(内容 .. '  \n\n')}
 self.玩家组[id].发言内容[#self.玩家组[id].发言内容].开关=true
 self.玩家组[id].发言内容[#self.玩家组[id].发言内容].起始=os.time()
 self.玩家组[id].超丰富文本:清空()
 self.玩家组[id].超丰富文本:添加文本(内容)






 end

function 玩家类:更改称谓(内容)

  self.临时数据=内容
  self.临时数据.id=self.临时数据.id+0
  if self.玩家组[self.临时数据.id]~=nil then



   self.玩家组[self.临时数据.id].称谓=self.临时数据.称谓
    end



 end


function 玩家类:添加升级(id)
 id=id+0
  if self.玩家组[id]~=nil then



   self.玩家组[id].升级动画=WAS动画类.创建(addon,0x9B3AF4E5)
   self.玩家组[id].升级动画.动画.帧率=0.07
    end



 end



function 玩家类:更改战斗(id,内容)

  if self.玩家组[id]~=nil then



   self.玩家组[id].战斗开关=内容
    end



 end
function 玩家类:更改队长(id,内容)

  if self.玩家组[id]~=nil then



   self.玩家组[id].队长数据.开关=内容
    end



 end





function 玩家类:添加路径1(内容)

--print(内容)
 self.移动目标=内容
 self.移动id=self.移动目标.id
 self.移动目标=分割文本(self.移动目标.数据,"*-*")
 --table.print(self.移动目标
  --if self.路径数据==nil then print(数据,"错误的移动数据2")  return 0 end
 --if self.路径数据.数据==nil or self.路径数据.数据==0 then print(数据,"错误的移动数据1")  return 0 end
  if  self.玩家组[self.移动id]==nil then print(数据,"错误的移动数据")   return 0 end


  self.路径数据={数据={}}

 for n=1,#self.移动目标 do

   if self.移动目标[n]~=nil and self.移动目标[n]~="" then
   self.分割数组=分割文本(self.移动目标[n],"@")
   if self.分割数组~=nil and self.分割数组~=nil then

     self.路径数据.数据[#self.路径数据.数据+1]={x=self.分割数组[1]+0,y=self.分割数组[2]+0}

     end

      end


    end


 if  #self.路径数据.数据==0 then  return 0 end
 self.路径数据.id=self.移动id
  if self.玩家组[self.路径数据.id]==nil then return 0 end
   self.玩家组[self.路径数据.id].路径组={}
  if #self.路径数据.数据==0 then

   if self.玩家组[self.路径数据.id].动作=="行走" then
     self.玩家组[self.路径数据.id].移动时间=os.time()
     self.玩家组[self.路径数据.id].动作="静立"
     self.玩家组[self.路径数据.id].动画:置帧率(self.玩家组[self.路径数据.id].动作,1.1)
     self.玩家组[self.路径数据.id].动画:换方向(self.玩家组[self.路径数据.id].动作,self.玩家组[self.路径数据.id].方向)
     end
    return 0
    end


 for n=1,#self.路径数据.数据 do

    self.玩家组[self.路径数据.id].路径组[n]={x=self.路径数据.数据[n].x,y=self.路径数据.数据[n].y}

    end
 self.玩家组[self.路径数据.id].移动目标={x=self.路径数据.数据[1].x*20,y=self.路径数据.数据[1].y*20}
 end


function 玩家类:添加路径(内容)


 self.移动目标=内容
 self.移动id=self.移动目标.id
 self.移动目标=分割文本(self.移动目标.数据,"*-*")
  if self.玩家组[self.移动id]==nil then print(数据,"错误的移动数据")   return 0 end
 self.临时格子1={x=self.移动目标[1],y=self.移动目标[2]}
 self.临时格子={x=self.玩家组[self.移动id].x,y=self.玩家组[self.移动id].y}
 self.路径数据={}
 self.路径数据.数据=tp.地图:寻路(self.临时格子,self.临时格子1) --.路径类
 self.路径数据.id=self.移动id
  if self.玩家组[self.路径数据.id]==nil then return 0 end
   self.玩家组[self.路径数据.id].路径组={}
  if #self.路径数据.数据==0 then

   if self.玩家组[self.路径数据.id].动作=="行走" then
     self.玩家组[self.路径数据.id].移动时间=os.time()
     self.玩家组[self.路径数据.id].动作="静立"
     self.玩家组[self.路径数据.id].动画:置帧率(self.玩家组[self.路径数据.id].动作,1.1)
     self.玩家组[self.路径数据.id].动画:换方向(self.玩家组[self.路径数据.id].动作,self.玩家组[self.路径数据.id].方向)
     end
    return 0
    end


 for n=1,#self.路径数据.数据 do

    self.玩家组[self.路径数据.id].路径组[n]={x=self.路径数据.数据[n].x,y=self.路径数据.数据[n].y}

    end
 self.玩家组[self.路径数据.id].移动目标={x=self.路径数据.数据[1].x*20,y=self.路径数据.数据[1].y*20}
 玩家寻路开关=false
 end

function 玩家类:停止移动(内容)
 if 1==1 then return 0 end

 self.路径数据=内容

  self.玩家组[self.路径数据.id].路径组={}
  self.玩家组[self.路径数据.id].x=self.路径数据.数据.x
  self.玩家组[self.路径数据.id].y=self.路径数据.数据.y
  self.玩家组[self.路径数据.id].动作="静立"
  self.玩家组[self.路径数据.id].动画:置帧率(self.玩家组[self.路径数据.id].动作,1.1)
  self.玩家组[self.路径数据.id].动画:换方向(self.玩家组[self.路径数据.id].动作,self.玩家组[self.路径数据.id].方向)
 end




function 玩家类:移动事件(id)
  if #self.玩家组[id].路径组~=0 then

      self.临时xy={x=self.玩家组[id].移动目标.x,y= self.玩家组[id].移动目标.y}
      self.移动速度=180*全局dt
      self.临时速度=取移动坐标 ({x=self.玩家组[id].x,y=self.玩家组[id].y},self.临时xy,self.移动速度)

      self.角度= 取两点角度({x=self.玩家组[id].x,y=self.玩家组[id].y},self.临时速度)
     if 角度算方向(self.角度,self.玩家组[id].变身)~= self.玩家组[id].方向 then
        self.玩家组[id].方向=角度算方向(self.角度,self.玩家组[id].变身)
        self.玩家组[id].动作="行走"
        self.玩家组[id].动画:换方向(self.玩家组[id].动作,self.玩家组[id].方向)
        self.玩家组[id].动画:置帧率(self.玩家组[id].动作,1.4)
      else
         self.玩家组[id].动作="行走"
          self.玩家组[id].动画:置帧率(self.玩家组[id].动作,1.4)

       end
      if 取两点距离({x=self.玩家组[id].x,y=self.玩家组[id].y},self.临时xy) >= self.移动速度 then

        self.玩家组[id].x,self.玩家组[id].y=self.临时速度.x,self.临时速度.y

      else

       --table.remove(self.玩家组[id].路径组,1)
       if 取两点距离({x=self.玩家组[id].x,y=self.玩家组[id].y},self.玩家组[id].移动目标)<=20 then
         table.remove(self.玩家组[id].路径组,1)
         if #self.玩家组[id].路径组>=1 then

           self.玩家组[id].移动目标={x=self.玩家组[id].路径组[1].x*20,y=self.玩家组[id].路径组[1].y*20}

          else

           self.玩家组[id].移动时间=os.time()
           self.玩家组[id].动作="静立"
           self.玩家组[id].动画:置帧率(self.玩家组[id].动作,1.1)
           self.玩家组[id].动画:换方向(self.玩家组[id].动作,self.玩家组[id].方向)

           end



         end


        end




    end


 end

function 玩家类:移动事件1(id)

  if #self.玩家组[id].路径组>0 then

      self.临时xy={x=self.玩家组[id].路径组[1].x*20,y=self.玩家组[id].路径组[1].y*20}

      self.角度= 取两点角度({x=self.玩家组[id].x,y=self.玩家组[id].y},self.临时xy)
      self.玩家组[id].方向=角度算方向(self.角度)
      self.玩家组[id].动作="行走"
      self.玩家组[id].动画:换方向(self.玩家组[id].动作,self.玩家组[id].方向)
      self.玩家组[id].动画:置帧率(self.玩家组[id].动作,1.4)
      self.移动速度=180*全局dt
      self.临时速度=取移动坐标 ({x=self.玩家组[id].x,y=self.玩家组[id].y},self.临时xy,self.移动速度)
      if ((取两点距离({x=self.玩家组[id].x,y=self.玩家组[id].y},self.临时xy) >= self.移动速度 )) then
       self.玩家组[id].x,self.玩家组[id].y=self.临时速度.x,self.临时速度.y
      else
       table.remove(self.玩家组[id].路径组,1)
       if #self.玩家组[id].路径组<=0 then
         self.玩家组[id].动作="静立"
         self.玩家组[id].动画:置帧率(self.玩家组[id].动作,1.1)
         self.玩家组[id].动画:换方向(self.玩家组[id].动作,self.玩家组[id].方向)



         end


        end
  else

     --self.玩家组[id].动作="静立"



    end


 end

function 玩家类:刷新坐标(内容)
  --print(内容)
 self.临时数据=内容
 if self.玩家组[self.临时数据.id]==nil then return 0 end

  self.玩家组[self.临时数据.id].动作=self.临时数据.动作

  if self.临时数据.动作=="静立" then

  -- self.玩家组[self.临时数据.id].动画:置帧率(self.临时数据.动作,0.1)
  else
    --self.玩家组[self.临时数据.id].动画:置帧率(self.临时数据.动作,0.08)
    self:添加路径(self.临时数据.id,self.临时数据.xy.x,self.临时数据.xy.y)
    end


  if self.玩家组[self.临时数据.id].方向~=self.临时数据.方向 then
      --self.玩家组[self.临时数据.id].动画:换方向(self.临时数据.动作,self.临时数据.方向)

     end



 end



function 玩家类:更新(dt)
  self.鼠标重叠=false
self.甲组冠军:更新(dt)
self.甲组亚军:更新(dt)
self.甲组季军:更新(dt)
self.甲组八强:更新(dt)
 for n, v in pairs(self.玩家组) do


      self.玩家组[n].动画:更新(dt,self.玩家组[n].动作)
      if self.玩家组[n].升级动画~=nil  then
       self.玩家组[n].升级动画.动画:更新(dt)

       if self.玩家组[n].升级动画.动画.当前帧==self.玩家组[n].升级动画.动画.结束帧 then self.玩家组[n].升级动画=nil end
       end
    --  print(self.玩家组[n].移动目标,self.玩家组[n].动作,os.time()-self.玩家组[n].移动时间)
      self:移动事件(n)

      --[[if self.玩家组[id].移动目标~=0 or self.玩家组[n].移动坐标~=0  then

       self:移动事件(n)
       --]]

      if self.玩家组[n].移动目标==0 and self.玩家组[n].动作=="行走" then

        if os.time()-self.玩家组[n].移动时间>=1 then
         self.玩家组[n].动作="静立"
         self.玩家组[n].动画:置帧率(self.玩家组[n].动作,1.1)
         self.玩家组[n].动画:换方向(self.玩家组[n].动作,self.玩家组[n].方向)


         end

        end
      if self.玩家组[n].队长数据.开关 then self.玩家组[n].队长数据.动画:更新(dt) end
        if  self.玩家组[n].动画[self.玩家组[n].动作]:是否选中(鼠标.x,鼠标.y) then self.鼠标重叠=true end
       if self.玩家组[n].动画[self.玩家组[n].动作]:是否选中(鼠标.x,鼠标.y) and 引擎.鼠标弹起(左键) then
         if 组队开关   then
           --客户端:发送数据(5005,self.玩家组[n].id)
           客户端:发送数据(self.玩家组[n].id+0,6,11,"69@-@79",1)
           组队开关=false
           鼠标动画.显示序列=1
           return 0

          elseif 玩家给予开关 then
           --客户端:发送数据(4020,self.玩家组[n].id)
           客户端:发送数据(self.玩家组[n].id+0,2,26,"9A@-@14",1)
           玩家给予开关=false
           鼠标动画.显示序列=1
           return 0
          elseif 交易开关 then
           --客户端:发送数据(4040,self.玩家组[n].id)
           客户端:发送数据(self.玩家组[n].id+0,6,27,"HY@-@S1Q1",1)
           交易开关=false
           鼠标动画.显示序列=1
           return 0

          elseif pk开关 then
          -- 客户端:发送数据(3014,self.玩家组[n].id)
           客户端:发送数据(self.玩家组[n].id+0,6,28,"P7@-@Q4",1)
           pk开关=false
           鼠标动画.显示序列=1
           return 0

           end

        end


     end
 self.战斗动画:更新(dt)
end
function 玩家类:取排序点()
  return self.xy.y
end
function 玩家类:删除玩家(内容)


 self.临时id=内容+0

 self.玩家组[self.临时id]=nil


 end

 function 玩家类:摊位显示(x,y)
  self.摊位点击=false
   for n, v in pairs(self.玩家组) do
    --print(self.玩家组[n].x,self.玩家组[n].y)
     if self.玩家组[n]~=nil then

      if self.玩家组[n].摊位名称~="" then
            if string.len(self.玩家组[n].摊位名称)<=4 then
     self.小摊位:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y-100)
     self.摊位文字:显示(self.玩家组[n].x+tp.屏幕.xy.x-13+(4-string.len(self.玩家组[n].摊位名称))*1.8,self.玩家组[n].y+tp.屏幕.xy.y-114,self.玩家组[n].摊位名称)
     if self.小摊位:取包围盒():检查点(鼠标.x,鼠标.y) and tp.主界面:界面重叠()==false and 引擎.鼠标弹起(右键) and self.摊位点击==false then

       客户端:发送数据(n,7,44,"5",1)
       self.摊位点击=true

       end
   elseif string.len(self.玩家组[n].摊位名称)<=8 then
     self.中摊位:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y-100)
     self.摊位文字:显示(self.玩家组[n].x+tp.屏幕.xy.x-25+(8-string.len(self.玩家组[n].摊位名称))*1.8,self.玩家组[n].y+tp.屏幕.xy.y-114,self.玩家组[n].摊位名称)
     if self.中摊位:取包围盒():检查点(鼠标.x,鼠标.y) and tp.主界面:界面重叠()==false and 引擎.鼠标弹起(右键) and self.摊位点击==false then
       客户端:发送数据(n,7,44,"5",1)
       self.摊位点击=true
       end
    else

     self.大摊位:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y-100)
     self.摊位文字:显示(self.玩家组[n].x+tp.屏幕.xy.x-40+(12-string.len(self.玩家组[n].摊位名称))*1.8,self.玩家组[n].y+tp.屏幕.xy.y-114,self.玩家组[n].摊位名称)
     if self.大摊位:取包围盒():检查点(鼠标.x,鼠标.y) and tp.主界面:界面重叠()==false and 引擎.鼠标弹起(右键) and self.摊位点击==false then

       客户端:发送数据(n,7,44,"5",1)
       self.摊位点击=true

       end


      end




             end



          end

     end
   end
function 玩家类:显示(x,y)


  for n, v in pairs(self.玩家组) do
    --print(self.玩家组[n].x,self.玩家组[n].y)
     if self.玩家组[n]~=nil then

        if 玩家屏蔽==false then

           self.玩家组[n].动画:显示(self.玩家组[n].动作,self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y)
           if  self.玩家组[n].升级动画~=nil  then
              self.玩家组[n].升级动画.动画:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y)
              end
          end


        if self.玩家组[n].称谓=="" then


          --显示人物平常名称(self.玩家组[n].名称,self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y)
          if 战斗模式==false then
           显示人物平常名称(self.玩家组[n].名称,self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+3)
          else
           显示人物平常名称(self.玩家组[n].名称.."("..n..")",self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+3)
           end

        else
          if self.玩家组[n].称谓== "武神坛甲组冠军" then
            self.甲组冠军:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+5)
      elseif  self.玩家组[n].称谓== "武神坛甲组亚军" then
        self.甲组亚军:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+5)
      elseif  self.玩家组[n].称谓== "武神坛甲组季军" then
        self.甲组季军:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+5)
      elseif self.玩家组[n].称谓== "武神坛甲组八强" then
        self.甲组八强:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+5)
          else
          显示人物称谓(self.玩家组[n].称谓,self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y-10)
        end
         if 战斗模式==false then
           显示人物平常名称(self.玩家组[n].名称,self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+8)
          else
           显示人物平常名称(self.玩家组[n].名称.."("..n..")",self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y+3)
           end
         end

       if self.玩家组[n].队长数据.开关 then
          self.玩家组[n].队长数据.动画:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y-90)

         end
        if self.玩家组[n].战斗开关 then

           self.战斗动画:显示(self.玩家组[n].x+tp.屏幕.xy.x,self.玩家组[n].y+tp.屏幕.xy.y-90)

           end



       --显示发言内容

       if #self.玩家组[n].发言内容>0 then
       self.临时宽度=math.floor(self.玩家组[n].发言内容[1].长度)-2
       if self.临时宽度>12 then

         self.临时宽度=12

         end

       self.偏差宽度=self.玩家组[n].发言内容[1].长度*3+5
       if self.偏差宽度>60 then

         self.偏差宽度=60

         end
       self.偏差高度=math.floor(self.玩家组[n].发言内容[1].长度*0.1+1)*10+100



       信息提示:显示(2,self.临时宽度,math.floor(self.玩家组[n].发言内容[1].长度*0.1)+2,self.玩家组[n].x+tp.屏幕.xy.x-self.偏差宽度,self.玩家组[n].y+tp.屏幕.xy.y-self.偏差高度)
       self.偏差宽度=self.玩家组[n].发言内容[1].长度*3+5
       if self.偏差宽度>60 then

         self.偏差宽度=60

         end
       self.偏差高度=math.floor(self.玩家组[n].发言内容[1].长度*0.1+1)*10+100-5
       self.玩家组[n].超丰富文本:显示(self.玩家组[n].x+tp.屏幕.xy.x-self.偏差宽度+5,self.玩家组[n].y+tp.屏幕.xy.y-self.偏差高度)
       if os.time()-self.玩家组[n].发言内容[1].起始>=5 then

          table.remove(self.玩家组[n].发言内容,1)

         end



       end






       end

     end

end
return 玩家类